﻿/*
01串排序 
Time Limit:1000MS  Memory Limit:32768K

  
Description:
将01串首先按长度排序，长度相同时，按1的个数多少进行排序，1的个数相同时再按ASCII码值排序。

Input:
输入数据中含有一些01串，01串的长度不大于256个字符。 
Output:
重新排列01串的顺序。使得串按基本描述的方式排序。 
Sample Input:
10011111
00001101
1010101
1
0
1100
Sample Output:
0
1
1100
1010101
00001101
10011111

*/
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;

struct Comparator 
{
public:
	bool operator()(const string& s1, const string& s2)
	{
		if(s1.length()==s2.length())
		{
			const char c='1';		
			int c1 = count(s1.begin(), s1.end(), c);
			int c2 = count(s2.begin(), s2.end(), c);
			if(c1==c2)
				return s1<s2;
			else
				return c1<c2;
		}
		return s1.length()<s2.length();
	}
};

int main()
{
	vector<string> vs;
	vs.reserve(10);
	
	for (string s;  cin>>s; )
	{
		vs.push_back(s);
	}
	sort(vs.begin(), vs.end(), Comparator());
	
	copy(vs.begin(), vs.end(), ostream_iterator<string>(cout, "\n"));
	
	return 0;
}